<?php
include_once 'automovel.php';
include_once 'cliente.php';
include_once 'configuracoes.php';
include_once 'bean.php';

class Locacao extends Bean {
	public $data, $data_devolucao, $diarias, $condutores_extras, $gps, $cadeira_bebe, $automovel, $cliente, $configuracoes;
	
	public function get_data() {
		return $this->data;
	}
	
	public function get_data_mysql() {
		return $this->data->format("Y-m-d H:i:s");
	}
	
	public function get_data_formatado() {
		return $this->data->format("d/m/Y, \à\s H:i");
	}
	
	public function set_data(DateTime $data) {
		$this->data = $data;
	}
	
	public function set_data_mysql($string) {
		$this->data = DateTime::createFromFormat("Y-m-d H:i:s", $string);
	}
	
	public function get_data_devolucao() {
		return $this->data_devolucao;
	}
	
	public function get_data_devolucao_mysql() {
		if (is_null($this->data_devolucao) || $this->data_devolucao == "") {
			return "";
		}
		return $this->data_devolucao->format("Y-m-d H:i:s");
	}
	
	public function get_data_devolucao_formatado() {
		return $this->data_devolucao->format("d/m/Y, \à\s H:i");
	}
	
	public function set_data_devolucao(DateTime $data_devolucao) {
		$this->data_devolucao = $data_devolucao;
	}
	
	public function set_data_devolucao_mysql($string) {
		$this->data_devolucao = DateTime::createFromFormat("Y-m-d H:i:s", $string);
	}
	
	public function get_diarias() {
		return $this->diarias;
	}
	
	public function set_diarias($diarias) {
		$this->diarias = $diarias;
	}
	
	public function get_condutores_extras() {
		return $this->condutores_extras;
	}
	
	public function set_condutores_extras($condutores_extras) {
		$this->condutores_extras = $condutores_extras;
	}
	
	public function get_gps() {
		return $this->gps;
	}
	
	public function set_gps($gps) {
		$this->gps = $gps;
	}
	
	public function get_cadeira_bebe() {
		return $this->cadeira_bebe;
	}
	
	public function set_cadeira_bebe($cadeira_bebe) {
		$this->cadeira_bebe = $cadeira_bebe;
	}
	
	public function get_automovel() {
		return $this->automovel;
	}
	
	public function set_automovel(Automovel $automovel) {
		$this->automovel = $automovel;
	}
	
	public function get_cliente() {
		return $this->cliente;
	}
	
	public function set_cliente(Cliente $cliente) {
		$this->cliente = $cliente;
	}
	
	public function get_configuracoes() {
		return $this->configuracoes;
	}
	
	public function set_configuracoes(Configuracoes $configuracoes) {
		$this->configuracoes = $configuracoes;
	}
	
	public function get_deveria_devolver() {
		$intervalo = new DateInterval("P" . $this->diarias . "DT3H");
		$deveria_devolver = DateTime::createFromFormat("Y-m-d H:i:s", $this->get_data_mysql());
		$deveria_devolver->add($intervalo);
		return $deveria_devolver;
	}
	
	public function get_horas_multa() {
		$deveria_devolver = $this->get_deveria_devolver();
		if (isset($this->data_devolucao)) {
			$devolucao = $this->data_devolucao;
		}
		else {
			$devolucao = new DateTime();
			$devolucao->setTimezone(new DateTimeZone("America/Recife"));
		}
		$horas = floor(($devolucao->getTimestamp() - $deveria_devolver->getTimestamp()) / 3600);
		if ($horas > 0) {
			return $horas;
		}
		return 0;
	}
	
	public function get_parcela_diarias() {
		return $this->diarias 
				* $this->automovel->get_diaria();
	}
	
	public function get_parcela_condutores_extras() {
		return $this->diarias
				* $this->condutores_extras 
				* $this->configuracoes->get_preco_condutor_extra();
	}
	
	public function get_parcela_multa() {
		return $this->get_horas_multa() * $this->configuracoes->get_preco_multa();
	}
	
	public function get_parcela_gps() {
		if ($this->gps == false) {
			return 0;
		}
		return $this->diarias 
				* $this->configuracoes->get_preco_gps();
	}
	
	public function get_parcela_cadeira_bebe() {
		if ($this->cadeira_bebe == false) {
			return 0;
		}
		return $this->diarias
				* $this->configuracoes->get_preco_cadeira_bebe();
	}
	
	public function get_preco() {
		return $this->get_parcela_diarias()
				+ $this->get_parcela_condutores_extras()
				+ $this->get_parcela_gps()
				+ $this->get_parcela_cadeira_bebe()
				+ $this->get_parcela_multa();
	}
}
?>